//发送
#include <ESP8266WiFi.h>
#include <espnow.h>

//接收方MAC地址 根据自己的板子修改
uint8_t broadcastAddress[] = {0xC4, 0x5B, 0xBE, 0x4C, 0xEB, 0x1F};

//发送数据的结构体
typedef struct struct_message {
//  char a[32];
//  int b;
//  float c;
  String d;
//  bool e;
} struct_message;

//创建一个新的类型变量
struct_message myData;

//这是一个回调函数，将在发送消息时执行。
//在这种情况下，无论是否成功发送该消息，都会简单地打印出来
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  if (sendStatus == 0){
    Serial.print("vis p1,0\xff\xff\xff");  // 成功
  }
  else{
    Serial.print("vis p1,1\xff\xff\xff");  // 失败
  }
}

void setup() {
  //初始化串行监视器以进行调试
  Serial.begin(115200);

  //将设备设置为Wi-Fi站点
  WiFi.mode(WIFI_STA);

  //立即初始化ESP
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }

  //设置ESP8266角色  ESP_NOW_ROLE_CONTROLLER， ESP_NOW_ROLE_SLAVE， 
  //ESP_NOW_ROLE_COMBO， ESP_NOW_ROLE_MAX。
  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  //先前创建的功能。
  esp_now_register_send_cb(OnDataSent);
  
  //与另一个ESP-NOW设备配对以发送数据
  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}

/* ----------------------------------------------- */
String str="";

void loop() 
{
//  strcpy(myData.a, "THIS IS A CHAR");
//  myData.b = random(1,20); //随机数
//  myData.c = 1.2;
//  myData.d = "Hello";
//  myData.e = false;
//
//  //发送消息
//  esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
//  //延时两秒
//  delay(2000);

  str="";
  while (Serial.available() > 0)
  {
    str += char(Serial.read());   // read是剪切，而不是复制
    delay(10);  // 延时
  }
  if (str.length() == 8)
  {
//    strcpy(myData.a, "THIS IS A CHAR");
//    myData.b = random(1,20); //随机数
//    myData.c = 1.2;
    myData.d = str;
//    myData.e = false;
    esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
  }

}
